import os
from flask_script import Manager, Server
from flask_migrate import Migrate, MigrateCommand

from BookWorldWeb import create_app
from BookWorldWeb.models import db, User, Post, Tag, Comment

# 默认使用 Dev 配置
env = os.environ.get('BOOKWORLDWEB', 'dev')
app = create_app('BookWorldWeb.config.%sConfig' % env.capitalize())

migrate = Migrate(app, db)

manage = Manager(app)
manage.add_command('server', Server(use_debugger=True))
manage.add_command('db', MigrateCommand)


@manage.shell
def make_shell_context():
    return dict(app=app, db=db, User=User, Post=Post, Comment=Comment, Tag=Tag)


if __name__ == '__main__':
    manage.run()

# python manage.py server 运行程序
# python manage.py shell  运行shell
# 创建数据库表 >>> db.create_all()

# 数据库迁移
# python manage.py db                               显示命令列表
# python manage.py db init                          初始化迁移文件
# python manage.py db migrate -m"initial migration" 提交迁移记录
# python manage.py db upgrade                       应用迁移记录, 并改变数据库结构
# python manage.py db history                       查看迁移历史
# python manage.py db downgrade 7ded34bc4fb         回退迁移历史
# 同 Git 一样, 每一个迁移记录都由一个哈希值来表示. 这是 Alembic 的重要功能,
# 但只用于他的表层. 你也可以尝试把迁移记录和 Git 提交记录对应起来, 这样当你
# 把代码回滚到 Git 中的某个版本时, 也很容易地升级或降级数据库结构.
